package cn.iocoder.boot.springai001.controller.dto;

import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;

import java.util.List;

/**
 * 对话请求 DTO
 *
 * @author iocoder
 */
@Data
@Schema(description = "对话请求参数")
public class ChatRequest {

    @Schema(description = "用户问题", requiredMode = Schema.RequiredMode.REQUIRED, example = "你好，请介绍一下你自己")
    private String query;

    @Schema(description = "系统提示词，定义AI的角色和行为", example = "你是一个乐于助人的 AI 智能助手")
    private String prompt = "你是一个乐于助人的 AI 智能助手";

    @Schema(description = "图片URL列表，支持多张图片输入", example = "[\"https://example.com/image1.jpg\"]")
    private List<String> imageUrls;

    @Schema(description = "AI模型名称", example = "deepseek-chat")
    private String model = "deepseek-chat";

    @Schema(description = "温度参数，控制回复的随机性(0-1)，值越高越有创意", example = "0.5")
    private Double temperature = 0.3;

    @Schema(description = "是否启用思维链模式，提升复杂推理任务的准确性", example = "false")
    private Boolean enableCoT = false;

    @Schema(description = "思维链模式类型：ZERO_SHOT（零样本）、FEW_SHOT（少样本）", example = "ZERO_SHOT")
    private CoTMode cotMode = CoTMode.ZERO_SHOT;

    @Schema(description = "思维链示例（仅在 FEW_SHOT 模式下使用）", example = "Q: 问题示例\\nA: 答案示例")
    private String cotExample;

    @Schema(description = "对话模式类型", example = "BASIC")
    private ChatMode chatMode = ChatMode.BASIC;

    @Schema(description = "会话ID，用于区分不同用户或会话的上下文", example = "1000000000000001")
    private String sessionId = "default-session";

    @Schema(description = "用户ID，用于会话管理和权限控制", example = "user_default")
    private String userId = "user_default";

    @Schema(description = "是否显示工具执行结果（仅在任务规划模式下使用）", example = "true")
    private Boolean showToolResults = true;

    @Schema(description = "本次请求ID（可由前端生成用于取消/停止）", example = "8c1d5f2e-7d3a-4b1b-ae0f-2f9e2a3b9c10")
    private String requestId;

    /**
     * 思维链模式枚举
     */
    public enum CoTMode {
        /**
         * 零样本思维链：直接在问题后添加"让我们逐步思考"
         */
        ZERO_SHOT,
        
        /**
         * 少样本思维链：提供示例问题和推理过程
         */
        FEW_SHOT
    }

    /**
     * 对话模式枚举
     */
    public enum ChatMode {
        /**
         * 基础对话模式：使用默认配置的 ChatClient，包含所有工具
         */
        BASIC,
        
        /**
         * 任务规划模式：专门用于复杂任务规划，支持多步骤、多工具协作
         */
        TASK_PLANNING,
        
        /**
         * 流式工具调用模式（手动模式）：基于 Spring AI 官方推荐的手动工具调用模式
         */
        STREAMING_TOOLS_MANUAL
    }
}

